perm filename PROLOG.PRL[LSC,LSP] blob
sn#763158 filedate 1984-08-03 generic text, type T, neo UTF8
; HOW TO USE Portable-PROLOG
; (prolog {file-name⎇)
; (prolog) input from terminal
; (prolog {(directory)⎇ file-name {extension⎇)
; A file must be terminated by "stop".
;
; The Syntax of Portable-Prolog
; +(f1 {p1⎇...): asserts a fact
; +(f1 {p1⎇...)-(f2 {p2⎇...) ... -(fn {pn⎇...): asserts a theorem
; -(f1 {p1⎇...) ... -(fn {pn⎇...): query
; -(end):, stop, end, epilog, or end end of prolog session
;
; Convensions
; *variable represents a variable
; -(call function parameter...) apply a function to parameters
; with a success of unification
; -(eval form clause) unifies the value of form with clause
; ---- Now Enter the Portable-Prolog ----
; Problem 1. Naive reverse
+(NREVERSE (*X . *L0) *L)-(NREVERSE *L0 *L1)-(CONCAT *L1 (*X) *L):
+(NREVERSE () ()):
+(CONCAT (*A . *X) *Y (*A . *Z))-(CONCAT *X *Y *Z):
+(CONCAT () *Y *Y):
; [10-1:] Reverse 30 element.
+(REV15 *X)-(NREVERSE ( 1 2 3 4 5 6 7 8. 9. 10.
11. 12. 13. 14. 15. ) *X):
+(BENCH101)
-(EVAL (SSTATUS GCTIME 0) *GC1) -(EVAL (RUNTIME) *TIME1)
-(REV15 *X)
-(EVAL (RUNTIME) *TIME2) -(EVAL (STATUS GCTIME) *GC2)
-(EVAL (DIFFERENCE *TIME2 *TIME1) *TOTALTIME)
-(EVAL (DIFFERENCE *TIME2 *TIME1 *GC2) *RUNTIME)
-(CALL PRINT
(Total = *TOTALTIME usec, Runtime = *RUNTIME usec and Gc = *GC2 usec)):
; Problem 2. Quicksort.
+(QSORT (*X . *L) *R *R0)
-(PARTITION *L *X *L1 *L2)
-(QSORT *L2 *R1 *R0)
-(QSORT *L1 *R (*X . *R1)):
+(QSORT () *R *R):
+(PARTITION (*X . *L) *Y (*X . *L1) *L2)
-(EVAL (LESSP *X *Y) T)
-(PARTITION *L *Y *L1 *L2):
+(PARTITION (*X . *L) *Y *L1 (*X . *L2))
-(PARTITION *L *Y *L1 *L2):
+(PARTITION () *A () ()):
; [10-2:] Sort 20 element.
+(SORT20 *X)-(QSORT (27. 74. 17. 33. 94. 18. 46. 83. 65. 2.
32. 53. 28. 85. 99. 47. 28. 82. 6. 11. ) *X ()):
+(BENCH102)
-(EVAL (SSTATUS GCTIME 0) *GC1) -(EVAL (RUNTIME) *TIME1)
-(SORT20 *X)
-(EVAL (RUNTIME) *TIME2) -(EVAL (STATUS GCTIME) *GC2)
-(EVAL (DIFFERENCE *TIME2 *TIME1) *TOTALTIME)
-(EVAL (DIFFERENCE *TIME2 *TIME1 *GC2) *RUNTIME)
-(CALL PRINT
(Total = *TOTALTIME Runtime = *RUNTIME usec and Gc = *GC2 usec)):
; Now measure the benchmarks.
; -(BENCH101):
; -(BENCH102):
OK